package middleware

import (
	"github.com/gin-gonic/gin"
	"oa_kadia_link/config"
	"oa_kadia_link/globe"
	"oa_kadia_link/utils"
)

func CheckIp() gin.HandlerFunc {
	return func(context *gin.Context) {
		realIp := utils.GetRealIP(context.Request)
		rdb := globe.GetRdb()
		result, err := rdb.SIsMember(utils.GetBanIpFlag(), realIp).Result()
		if result == true || err != nil {
			utils.ErrorJSON(context, "该IP已被封禁，请联系管理员处理！")
			context.Abort()
			return
		}
		requestCnt := globe.RequestIpIncr(realIp)
		failCnt, _ := rdb.Get(utils.ToFailIp(realIp)).Int()
		if requestCnt > int64(config.GetCount().MaxRequest) || failCnt > config.GetCount().MaxFailToken {
			utils.ErrorJSON(context, "访问频繁，请休息一下再试！")
			context.Abort()
			return
		}
	}
}
